perm filename AREAS.SAI[PUB,TES]1 blob
sn#129293 filedate 1974-11-07 generic text, type T, neo UTF8
00100 BEGOF("AREAS")
00200
00300 COMMENT
00400
00500 An area declaration results in a declaration record of type AREATYPE
00600 on the ISTK stack. Each instantiation of an area on some page
00700 results in a distinct instantiation record allocated as a new dynamic
00800 array.
00900
01000 An instantiated area proceeds through three or four stages of status:
01100 made but unopened, opened, closed, [and disdeclared]. PLACE makes
01200 unopened areas, PLACELINE forces the area to open, filling it up or
01300 closing the page causes the area to close, and the END of the block
01400 in which it is declared causes it to be (closed and) dis-declared.
01500
01600 ;
01700
01800 PROCEDURES
00100 PUBLIC SIMPLE PROCEDURE AREAS! ;$"#
00200 BEGIN "AREAS!"
00300 AVAILREC[0] ← NULLAREAS ← 0 ;
00400 SYMTEXT ← SYMNUM("TEXT") ;
00500 END "AREAS!" ;
00100 PUBLIC RECURSIVE PROCEDURE ASSUREAREA ;$"#
00200 IF AREAIDA = 0 OR STATUS NEQ 1 THEN OPENAREA(IF AREAIXM THEN AREAIXM ELSE IXTEXT) ;
00100 PUBLIC PROCEDURE BURPAREAS(BOOLEAN VERBOSE) ;$"#
00200 BEGIN TES 8/19/74 CALLED BY DBURP ;
00300 INTEGER NAREAS ; INTEGER ARRAY FOUND[1:100], THISAREA[0:ONE], AA[0:ONE,0:ONE] ;
00400 PROCEDURE BURPAREADECL(INTEGER ILOC, IDA) ;
00500 BEGIN
00600 INTEGER I ;
00700 OUTSTR(
00800 (IF TEXTAR(ILOC) THEN NULL ELSE "TITLE ") &
00900 "AREA " & SYM[LDB(BIXNUM(ILOC))] &
01000 " LINES " & CVS(LINE1(ILOC)) & " TO " & CVS(LINE1(ILOC)+LINECT(ILOC)-1) &
01100 " CHARS " & CVS(CHAR1(ILOC)) & " TO " & CVS(CHAR1(ILOC)+CHARCT(ILOC)-1) &
01200 (IF (I←COLCT(ILOC)) NEQ 1 THEN " IN " & CVS(I) & " COLUMNS " &
01300 CVS(COLWID(ILOC)) & " WIDE" ELSE NULL) &
01400 CRLF & " " &
01500 (IF DISD(ILOC) THEN "DISDECLARED " ELSE "DECLARED ") &
01600 (IF FULHIGH(ILOC) THEN "FULL HEIGHT " ELSE NULL) &
01700 (IF FULWIDE(ILOC) THEN "FULL WIDTH " ELSE NULL) &
01800 "AT " & CVOS(ISTKIDA+ILOC) &
01900 (IF (I ← OLD!ACTIVE(ILOC)) AND I NEQ IDA THEN " RECORD "&CVOS(I) ELSE NULL) &
02000 (IF (I ← NEW!ACTIVE(ILOC)) THEN "NEWPAGE RECORD " & CVOS(I) ELSE NULL) &
02100 (IF (I←MARGINS(ILOC)) THEN " MARGINS " & CVS(LMARGX(I)) & SP & CVS(RMARGX(I)) ELSE NULL) &
02200 (IF XCRIBL THEN " FONTS " & PICKFONT(TFONT(ILOC))[3 TO ∞] &
02300 "*" & PICKFONT(OFONT(ILOC))[3 TO ∞] ELSE NULL) &
02400 (IF FULSTR(SSTK[FOOTSTR(ILOC)]) THEN " FOOTNOTES PENDING" ELSE NULL) &
02500 CRLF) ;
02600 END "BURPAREADECL" ;
02700 PROCEDURE BURPAREARECORD(INTEGER ARIDA; BOOLEAN INFRAME) ;
02800 BEGIN
02900 INTEGER COLS, LINES, I, J, X, Y ;
03000 INTEGER PCOL, PLINE, PPINE ;
03100 BOOLEAN SOME ;
03200 IDASSIGN(ARIDA, THISAREA) ;
03300 IDASSIGN(AAA, AA) ;
03400 IF (I←DEFA) THEN BEGIN FOUND[NAREAS←NAREAS+1]←I ; BURPAREADECL(I, ARIDA) END ;
03500 COLS ← ARRINFO(AA, 2)/2 ; LINES ← ARRINFO(AA,4) ;
03600 IF STATA=1 THEN TES 8/26/74 IT IS OPEN ;
03700 IF AREAIDA=ARIDA THEN COMMENT IT'S CURRENT ;
03800 BEGIN
03900 PCOL ← COL ; PLINE ← LINE ; PPINE ← PINE ;
04000 END
04100 ELSE BEGIN
04200 PCOL ← COLA ;
04300 PLINE ← RH(AA[PCOL,0]) ;
04400 PPINE ← RH(AA[(COLS+COLS-1) MOD (2*COLS) +1, 0]) ;
04500 END ;
04600 IF STATA > 1 THEN
04700 OUTSTR("AREA ? LINES " & CVS(ULLA) & " TO " &
04800 CVS(ULLA+LINECA-1) & " CHARS " & CVS(RH(AA[1,0])) &
04900 " TO ? IN " & CVS(COLCA) & " COLUMNS" & CRLF) ;
05000 OUTSTR(TB &
05100 (IF NOT INFRAME THEN " NOT IN FRAME"
05200 ELSE IF INA NEQ FRAMEIDA THEN " ** FRAME BACKLINK INCORRECT**"
05300 ELSE NULL) &
05400 (CASE STATA OF (" UNOPENED", " OPENED", " CLOSED", " DIS-DECLARED")) &
05500 " AT " & CVOS(ARIDA) &
05600 (IF AREAIDA=ARIDA THEN " (CURRENT)" ELSE NULL) &
05700 (IF XCRIBL THEN
05800 (IF XGENA THEN " XGENLINES = "&CVS(XGENA) ELSE NULL)&
05900 (IF OVERA THEN " OVEREST OF COLUMN 1 = "&CVS(OVERA) ELSE NULL)
06000 ELSE NULL) &
06100 (IF STATA=1 THEN
06200 " PLACED "&CVS(PLINE)&" LINES IN COLUMN "&
06300 CVS(IF PCOL>COLS THEN PCOL-COLS ELSE PCOL) &
06400 (IF PCOL>COLS THEN " FOOT" ELSE NULL) &
06500 (IF PCOL>COLS OR PPINE THEN " ("&CVS(PPINE)&" IN THE " &
06600 (IF PCOL>COLS THEN "LEG)" ELSE "FOOT)")
06700 ELSE NULL)
06800 ELSE NULL) &
06900 CRLF) ;
07000 IF VERBOSE THEN
07100 BEGIN
07200 OUTSTR(TB&" LINE"&TB) ;
07300 FOR I←1 THRU COLS DO OUTSTR(" COLUMN "&CVS(I)&TB) ;
07400 OUTSTR(CRLF & TB & TB) ;
07500 FOR I ← 1 THRU COLS DO OUTSTR(" CALF FOOT"&TB) ;
07600 OUTSTR(CRLF) ;
07700 FOR J ← 1 THRU LINES DO
07800 BEGIN
07900 SOME ← FALSE ;
08000 FOR I ← 1 THRU 2*COLS DO IF AA[I,J] THEN BEGIN SOME←TRUE;DONE END ;
08100 IF SOME THEN
08200 BEGIN
08300 OUTSTR(TB & " " & CVS(J) & TB) ;
08400 FOR I ← 1 THRU COLS DO
08500 FOR Y←0,COLS DO
08600 OUTSTR(IF (X←AA[I+Y,J]) THEN (" "&CVS(OWLS[X]))[∞-5 TO ∞]&TB ELSE TB) ;
08700 OUTSTR(CRLF) ;
08800 END ;
08900 END ;
09000 END ;
09100 END "BURPAREARECORD" ;
09200 INTEGER A, I, THISIDA, AAIDA ; BOOLEAN DID ;
09300 THISIDA ← WHATIS(THISAREA) ; AAIDA ← WHATIS(AA) ;
09400 IF FRAMEIDA=0 THEN OUTSTR("BETWEEN PAGES"&CRLF) TES 8/26/74 ;
09500 ELSE BEGIN
09600 A ← ARF ; NAREAS ← 0 ;
09700 WHILE A DO
09800 BEGIN COMMENT SEARCH THIS FRAME ;
09900 BURPAREARECORD(A, TRUE) ;
10000 A ← ARA ;
10100 END ;
10200 END ;
10300 A ← NULLAREAS ;
10400 WHILE A DO
10500 BEGIN COMMENT SEARCH NULL AREAS LIST (MADE BUT UNOPENED) ;
10600 BURPAREARECORD(A, FALSE) ;
10700 A ← RH(INA) ;
10800 END ;
10900 A ← IHED ;
11000 WHILE A > 1 DO
11100 BEGIN COMMENT SEARCH ISTK ;
11200 IF IXTYPE(A) = AREATYPE THEN
11300 BEGIN
11400 DID ← FALSE ;
11500 FOR I ← 1 THRU NAREAS DO IF FOUND[I]=A THEN
11600 BEGIN DID ← TRUE ; DONE END ;
11700 IF NOT DID THEN BURPAREADECL(A, 0) ;
11800 END ;
11900 A ← IXOLD(A) ;
12000 END ;
12100 MAKEBE(THISIDA, THISAREA) ; MAKEBE(AAIDA, AA) ;
12200 END "BURPAREAS" ;
00100 PUBLIC RECURSIVE PROCEDURE CLOSEAREA(INTEGER ITSIX; BOOLEAN DISDECLAREIT) ;$"#
00200 BEGIN "CLOSEAREA"
00300 INTEGER SAVAR, C, WC, NC, CC, LEFC ; BOOLEAN NORESP ;
00400 NORESP ← ITSIX < 0 ; ITSIX ← ABS(ITSIX) ;
00500 IF DISDECLAREIT THEN OLMAX ← OLMAX - LINECT(ITSIX)*COLCT(ITSIX) ;
00600 IF OPEN!ACTIVE(ITSIX) = 0 THEN IF DISDECLAREIT THEN CLOSET(ITSIX, FALSE, TRUE)
00700 ELSE BEGIN END
00800 ELSE BEGIN SAVAR←AREAIXM; PLACE(ITSIX); IF STATUS=0 THEN REMNULLS ; STATA ← STATUS←2;
00900 ULLA ← LINE1(ITSIX) ; AA[1,0] ← LEFC ← CHAR1(ITSIX) ;
01000 IF (NC ← COLCT(ITSIX)) > 1 THEN
01100 BEGIN
01200 WC ← COLWID(ITSIX) ; CC ← CHARCT(ITSIX) ;
01300 FOR C ← 2 THRU NC DO AA[C,0] ← LEFC + ((C-1)*(CC-WC)) DIV (NC-1) ;
01400 END ;
01500 LINECA ← LINECT(ITSIX) ; COLCA ← NC ;
01600 IF NOT NORESP THEN CLOSET(ITSIX, TRUE, DISDECLAREIT) ;
01700 IF DISDECLAREIT THEN BEGIN STATA ← STATUS←3 ; DEFA ← 0 END ;
01800 OPEN!ACTIVE(ITSIX) ← AREAIDA ← 0 ;
01900 IF SAVAR AND NOT DISDECLAREIT AND SAVAR NEQ ITSIX THEN PLACE(SAVAR) ELSE BEGIN AREAIXM←0; STATUS←-1 END ;
02000 END ;
02100 END "CLOSEAREA" ;
00100 PUBLIC RECURSIVE PROCEDURE DAREA(BOOLEAN TITAREA) ;$"#
00200 BEGIN
00300 INTEGER I, IX, SYMB, TEMP, A, B ;
00400 PRELOAD!WITH "LINE", "TO", "CHAR", "TO", "IN", "COLUMN", "COLUMN" ;
00500 OWN STRING ARRAY PRE[1:7] ; STRING ARRAY PAR[1:7] ;
00600 PRELOAD!WITH NULL, NULL, NULL, NULL, NULL, "WIDE", "APART" ;
00700 OWN STRING ARRAY POST[1:7] ;
00800 DBREAK; DPASS ;
00900 IF NOT THISISID THEN BEGIN WARN("=","AREA must have name"); THISWD←"!DUMMY" END ;
01000 SYMB ← SYMNUM(THISWD) ;
01100 PASS ;
01200 PARAMS(7, PRE, PAR, POST) ;
01300 IF NOT ON THEN RETURN ;
01400 BIND(DECLARE(SYMB, AREATYPE), IX←PUSHI(AREAWDS,AREATYPE)) ;
01500 IF FULHIGH(IX)←NULSTR(PAR[1]) THEN BEGIN A←1 ; B←FHIGH END comment assume LINE 1 TO <frame height> ;
01600 ELSE BEGIN A ← CVD(PAR[1]) ; B ← IF NULSTR(PAR[2]) THEN A ELSE CVD(PAR[2]) END ;
01700 LINE1(IX) ← A MAX 1 ; LINECT(IX) ← B-A+1 MAX 1 ;
01800 IF FULWIDE(IX)← NULSTR(PAR[3]) THEN BEGIN A←1 ; B←FWIDE END
01900 ELSE BEGIN A ← CVD(PAR[3]) ; B ← IF NULSTR(PAR[4]) THEN A ELSE CVD(PAR[4]) END ;
02000 CHAR1(IX) ← A MAX 1 ; CHARCT(IX) ← B←B-A+1 MAX 1 ;
02100 TEXTAR(IX) ← IF TITAREA THEN 0 ELSE 1 ;
02200 IF NULSTR(PAR[5]) THEN A ← 1 comment Assume IN 1 COLUMNS <charct> WIDE ;
02300 ELSE BEGIN "COLUMNS"
02400 A ← CVD(PAR[5]) ; comment How many ;
02500 IF FULSTR(PAR[6]) THEN B ← CVD(PAR[6]) MIN B DIV A
02600 ELSE B ← (B+( TEMP←IF FULSTR(PAR[7]) THEN CVD(PAR[7]) ELSE 5 )) DIV A - TEMP ;
02700 END "COLUMNS" ;
02800 COLCT(IX) ← A MAX 1 ; COLWID(IX) ← B MAX 1 ;
02900 OLMAX ← OLMAX + A*LINECT(IX) ;
03000 FOOTSTR(IX) ← PUSHS(1, NULL) ;
03100 MARGINS(IX) ← FONTSIX(IX) ← 0 ; TES 11/15/73 ;
03150 MILLSKIP(IX) ← MILLGSKIP(IX) ← 0 ; TES 11/7/74 ;
03200 TFONT(IX) ← OFONT(IX) ← DEFAULTFONT ; TES 11/15/73 ;
03300 END "DAREA" ;
00100 PUBLIC RECURSIVE PROCEDURE DCLOSE ;$"#
00200 BEGIN
00300 DBREAK ; PASS ;
00400 IF ON THEN
00500 IF THISTYPE=AREATYPE THEN CLOSEAREA(IX,FALSE)
00600 ELSE IF IX=IXPAGE THEN comment, * * * * * * * * * * * * * ;
00700 ELSE WARN("=","CLOSE What? "&SOMEINPUT) ;
00800 PASS ;
00900 END "DCLOSE" ;
00100 PUBLIC SIMPLE PROCEDURE GROWAA(INTEGER HOWMUCH) ;$"#
00200 BEGIN "GROWAA" TES 11/6/74 ;
00300 AAA ← BIGGR2(AAA, HOWMUCH) ;
00400 IDASSIGN(AAA, AA) ;
00500 END "GROWAA" ;
00100 PUBLIC SIMPLE PROCEDURE MAKEAREA(INTEGER ITSIX) ;$"#
00200 BEGIN "MAKEAREA"
00300 INTEGER C, L, CS, LS, NCH, OCH, C1, CC, FW, L1, LC, FH ;
00400 C1 ← CHAR1(ITSIX) ; CC ← CHARCT(ITSIX) ;
00500 FW ← IF FRAMEIDA THEN WIDEF ELSE FWIDE ;
00600 L1 ← LINE1(ITSIX) ; LC ← LINECT(ITSIX) ;
00700 FH ← IF FRAMEIDA THEN HIGHF ELSE FHIGH ;
00800 IF FULWIDE(ITSIX) THEN
00900 BEGIN Comment Make frame width ;
01000 OCH ← CC ; CHARCT(ITSIX) ← NCH ← FW ;
01100 COLWID(ITSIX) ← (COLWID(ITSIX) * NCH) DIV OCH ;
01200 END ;
01300 IF FULHIGH(ITSIX) THEN LINECT(ITSIX) ← FH ;
01400 L←OPEN!ACTIVE(ITSIX)←CREATE(0, AREC) ;
01500 IF NULLAREAS THEN BEGIN IDASSIGN(AREAIDA←NULLAREAS,THISAREA) ; INA←LHRH(L,INA) END ;
01600 IDASSIGN(AREAIDA ← L, THISAREA) ;
01700 DEFA ← ITSIX ; STATA ← 0 ; INA ← LHRH(0, NULLAREAS) ; NULLAREAS ← AREAIDA ;
01800 IDASSIGN(AAA←CREATE2(1, CS←COLCT(ITSIX)*2, 0, LS←LC+((LC DIV 2) MAX 8) ) , AA) ;
01900 ZEROWORDS(CS*(LS+1), AA[1,0]) ;
02000 COMMENT FOR C ← 1 THRU CS DO FOR L ← 0 THRU LS DO AA[C,L] ← 0 ;
02100 END "MAKEAREA" ;
00100 PUBLIC SIMPLE PROCEDURE PLACE(INTEGER NEWAREAIX) ;$"#
00200 COMMENT If No Place Area, AREAIXM=0. AREAIDA NEQ 0 if STATUS= 0 or 1 ;
00300 IF ON THEN
00400 BEGIN "PLACE"
00500 INTEGER FRM, ALLOW!FOR, MARGIX, FONTIX ;
00600 IF IXTYPE(NEWAREAIX) NEQ AREATYPE THEN
00700 BEGIN WARN("=","PLACE in non-area"); NEWAREAIX←IXTEXT END;
00800 IF AREAIXM THEN
00900 BEGIN TES 11/19/73 ;
01000 TFONT(AREAIXM) ← THISFONT ;
01100 OFONT(AREAIXM) ← OLDFONT ;
01200 END ;
01300 IF AREAIDA AND STATUS=1 THEN
01400 BEGIN
01500 COLA ← COL ; AA[COL,0] ← LHRH(COVERED,LINE) ; AA[PAL,0]←LHRH(COVERED,PINE) ; STATA←STATUS ;
01600 XGENA ← XGENLINES; RKJ;
01700 OVERA ← OVEREST ; TES 11/15/73;
01800 IF AREAIXM=NEWAREAIX THEN RETURN
01900 ELSE IF COL>COLS THEN BEGIN WARN("=","Can't PLACE inside footnotes!") ; RETURN END ;
02000 END ;
02100 IF XCRIBL AND AREAIXM NEQ NEWAREAIX THEN
02200 BEGIN INTEGER DUMMY ;TES 11/15/73 ;
02300 THISFONT ← TFONT(NEWAREAIX) ; OLDFONT ← OFONT(NEWAREAIX) ;
02400 IF (DUMMY←FNTFIL[THISFONT])>0 THEN MAKEBE(DUMMY, CW) ;
02500 END ;
02600 AREAIXM←NEWAREAIX ;
02700 IF (AREAIDA ← OPEN!ACTIVE(AREAIXM)) = 0 THEN MAKEAREA(AREAIXM)
02800 ELSE BEGIN MAKEBE(AREAIDA, THISAREA) ; IDASSIGN(AAA, AA) ; END ;
02900 IF (MARGIX ← MARGINS(AREAIXM)) = 0 THEN BEGIN LMARG ← 0 ; RMARG ← COLWID(AREAIXM) END
03000 ELSE BEGIN LMARG ← LMARGX(MARGIX) ; RMARG ← RMARGX(MARGIX) END ;
03100 ALLOW!FOR ← 2 * COLWID(AREAIXM) ;
03200 IF ALLOW!FOR > LENGTH(OWL) THEN OWL ← OWL & SP & SPS(ALLOW!FOR - LENGTH(OWL)) ;
03300 COLS ← COLCT(AREAIXM) ; LINES ← LINECT(AREAIXM) ; STATUS ← STATA ;
03400 IF STATUS=1 THEN
03500 BEGIN "IT'S OPEN"
03600 COL ← COLA ; PAL ← (COL+COLS-1) MOD (2*COLS) + 1 ; COMMENT, Leg SWAP Foot;
03700 LINE ← AA[COL,0] ; COVERED ← LH(LINE) ; LINE ← RH(LINE) ; PINE ← RH(AA[PAL,0]) ;
03800 XGENLINES ← XGENA; RKJ;
03900 OVEREST ← OVERA ; TES 11/15/73 ;
04000 END "IT'S OPEN"
04100 ELSE COL←PAL←LINE←COVERED←PINE←XGENLINES←OVEREST←0 ; RKJ ADDED XGENLINES;
04200 TES ADDED OVEREST 11/15/73;
04300 END "PLACE" ;
00100 PUBLIC RECURSIVE PROCEDURE OPENAREA(INTEGER ITSIX) ;$"#
00200 BEGIN "OPENAREA"
00300 INTEGER X, PREV, NEX, C1, CC, L1, LC ;
00400 IF FRAMEIDA=0 THEN OPENPAGE ; PLACE(ITSIX) ; IF STATUS=1 THEN RETURN ; REMNULLS ;
00500 C1 ← CHAR1(ITSIX) ; CC ← CHARCT(ITSIX) ;
00600 L1 ← LINE1(ITSIX) ; LC ← LINECT(ITSIX) ;
00700 IF C1+CC-1 > WIDEF THEN
00800 WARN(NULL,"AREA " & SYM[LDB(BIXNUM(ITSIX))] & " is wider than PAGE FRAME"&CRLF&
00900 "CHARS " & CVS(C1) & " TO " & CVS(C1+CC) &
01000 " exceeds " & CVS(WIDEF) & " WIDE") ;
01100 IF L1+LC-1 > HIGHF THEN
01200 WARN(NULL,"AREA " & SYM[LDB(BIXNUM(ITSIX))] & " is higher than PAGE FRAME"&CRLF&
01300 "LINES " & CVS(L1) & " TO " & CVS(L1+LC) &
01400 " exceeds " & CVS(HIGHF) & " HIGH") ;
01500 INA ← FRAMEIDA ;
01600 PREV ← 0 ; NEX ← ARF ; X ← AREAIDA ; COMMENT KEEP AREAS SORTED BY LEFT EDGE ;
01700 IF C1 > 1 THEN WHILE NEX DO
01800 BEGIN
01900 IDASSIGN(AREAIDA←NEX, THISAREA) ;
02000 IF DEFA THEN IF CHAR1(DEFA) GEQ C1 THEN DONE ELSE BEGIN END
02100 ELSE BEGIN IDASSIGN(AAA,AA) ; IF AA[1,0] GEQ C1 THEN DONE ; END ;
02200 PREV ← AREAIDA ; NEX ← ARA ;
02300 END ;
02400 IF PREV THEN
02500 BEGIN TES AND DCS REVISED 9/24/73@SU, 10/25/73@PARC ;
02600 IDASSIGN(AREAIDA←PREV, THISAREA) ; TES ADDED THIS ;
02700 ARA ← X ;
02800 END
02900 ELSE ARF ← X ;
03000 IDASSIGN(AREAIDA←X, THISAREA) ; ARA ← NEX ;
03100 IDASSIGN(AAA, AA) ; TES 8/27/74 FIX BUG !!;
03200 STATA ← STATUS←1 ; COL ← 1 ; PAL ← COLS + 1 ;
03300 IF FINDTRAN(LDB(BIXNUM(ITSIX)), 4) THEN RESPOND(LLTHIS) ; comment BEFORE areaname ... ;
03400 END "OPENAREA" ;
00100 PUBLIC SIMPLE PROCEDURE REMNULLS ;$"#
00200 BEGIN "REMNULLS"
00300 INTEGER L, R, I ;
00400 L ← LH(INA) ; R ← RH(INA) ;
00500 IF L OR R THEN
00600 BEGIN
00700 I ← AREAIDA ;
00800 IF L THEN BEGIN IDASSIGN(AREAIDA←L,THISAREA); DPB(R, H2(INA)) ; END ELSE NULLAREAS ← R ;
00900 IF R THEN BEGIN IDASSIGN(AREAIDA←R,THISAREA); DPB(L, H1(INA)) ; END ;
01000 IDASSIGN(AREAIDA ← I, THISAREA) ;
01100 END
01200 ELSE NULLAREAS ← 0 ;
01300 END "REMNULLS" ;
00100 FINISHED
00200
00300 ENDOF("AREAS")